<template>
    <Header></Header>
    <div class="confirmOrder">
      <div class="bgColor">
          <h1 class="main-shopcart">确认订单</h1>
      </div>
      <div class="main">
            <div class="info">
                <div class="head">商品信息</div>
                <div class="info-main" v-for="item in orderCourse" :key="item.id">
                    <div class="courseInfo">
                        <div class="coursebg">
                            <img :src="item.courseCover" alt="课程图片">
                        </div>
                        <div class="courseName">
                           {{item.courseName}}
                        </div>
                        <div class="coursePrice">
                            <span class="nowprice">￥{{item.discountPrice}}</span>
                            <span class="oldprice">￥{{item.salePrice}}</span>
                        </div>
                    </div>
                </div>
                <div class="choose">
                    <h3>支付方式 <span class="pay">{{paymentDescription}}</span></h3>
                    <div class="choosebg">
                        <span v-for="(item,index) in payMethod" :key="index" @click="payment(item)">{{item.description}}</span>
                    </div>
                </div>
                <ul class="foot">
                    <li class="foot-item">应付<span class="unique">￥{{totalPrice}}</span></li>
                    <li>
                        <button class="btn" @click="confirmOrder">确认订单</button>
                    </li>
                </ul>
            </div>
        </div>
        <!-- 二维码对话框 -->
        <el-dialog v-model='dialogVisible' class="pay-dialog" width="500px">
            <div class="dialogPrice">支付：<span class="prices">{{totalPrice}}元</span></div>
            <div class="codeimg">
                <img :src="payAddress" alt="支付二维码" title="支付二维码">
            </div>
            <div class="alert">请您及时付款，已便订单尽快处理！</div>
            <div class="finish">
                <div class="error">支付遇到问题</div>
                <div class="success">我已支付</div>
            </div>
        </el-dialog>
    </div>
    <Foot></Foot>
</template>

<script setup>
//组件
import Header from '../components/common/Header.vue'
import Foot from '../components/common/Footer.vue'
//引入vue3组合式api
import {ref,onBeforeMount} from 'vue';
//element ui
import {ElDialog} from 'element-plus';
//pinia
import {useCartStore} from '@/store/cart.js';
const cartStore = useCartStore();
//引入element ui
import {ElMessage} from 'element-plus';
//引入请求api
import {reqOrderCourse,reqPayment,reqZhifubaoOrderState,reqWeixinOrderState} from '@/api/cart.js';


//dialog,二维码对话框
const dialogVisible = ref(false);
//结算课程信息
let orderCourse = ref([]);
//支付方式信息
let payMethod = ref([]);
//订单总价
let totalPrice = ref(0);
//支付方式描述
let paymentDescription = ref("请选择支付方式");
//支付二维码地址
let payAddress = ref("");
//结算订单的订单号
let orderCode = ref('');

//支付方式点击事件
const payment = (item) => {
    if(item.code == 'wxpayment'){
        //微信支付
        paymentDescription.value = "微信支付";
    }else{
        paymentDescription.value = '支付宝支付';
    }
}

let courseOrder = ref([]);  //支付api所需的参数
//确认订单事件
const confirmOrder = async () => {
    let method = "";  //支付方式
    if(paymentDescription.value == "微信支付"){
        method = 'weixin'
    }else if(paymentDescription.value == "支付宝支付"){
        method = 'zhifubao';
    }else{
        ElMessage({type:"warning",message:"提示:请选择支付方式"})
        return;
    }
    dialogVisible.value = true;  //弹框
    let res = await reqPayment({courses:courseOrder.value},method);
    if(res.meta.code == 200){
        payAddress.value = res.data.payurl;
        orderCode.value = res.data.orderNumber;
        console.log(`订单确认api成功,${method}支付`,res);
    }

    //查询订单状态
    zfbOrderState();
}

//订单状态查询(短轮询支付宝订单是否支付成功)
const zfbOrderState = () => {
    let timer = null;
    timer = setInterval(()=>{
        if(paymentDescription.value == '支付宝支付'){
            reqZhifubaoOrderState({orderNumber:orderCode.value}).then(res=>{
                ElMessage({type:"info",message:"请尽快完成订单支付，超时订单将关闭"});
                //若订单支付成功
                //1.关闭定时器
                //2.跳转页面
                //3.删除购物车中购买成功的课程
                console.log("支付宝订单状态查询",res);
            })
        }else if(paymentDescription.value == '微信支付'){
            reqWeixinOrderState({orderNumber:orderCode.value}).then(res=>{
                ElMessage({type:"info",message:"请尽快完成订单支付，超时订单将关闭"});
                //若订单支付成功
                //1.关闭定时器
                //2.跳转页面
                //3.删除购物车中购买成功的课程
                console.log("微信订单状态查询",res);
            })
        }
        
    },5000)
}

//生命周期
onBeforeMount(()=>{
    //从仓库获取要结算的商品
    let list = [];  //要结算的商品作为参数发送给服务器
    courseOrder.value = list;  //确认订单请求也需要该参数
    cartStore.select.forEach(item => {
        list.push({id:item,number:1});
    });
    cartStore.shopCartList.forEach(item=>{
        list.forEach(i=>{
            if(item.id == i.id){
                i.id = item.courseId;  //参数需要的是课程id
            }
        })
    });
    //发请求获取结算商品信息
    reqOrderCourse(list).then(res=>{
        if(res.meta.code == 200){
            totalPrice.value = res.data.totalPrice;
            orderCourse.value = res.data.courses;
            payMethod.value = res.data.payModes;
            ElMessage({
                type: 'success',
                message: '订单信息获取成功',
            });
            console.log("结算商品信息获取成功",res);
        }else{
            ElMessage({type:"warning",message:`提示:${res.meta.msg}`});
        }
    })
})

</script>

<style scoped>
.finish{
  width: 170px;

  line-height: 30px;
  margin: 0 auto;
  display: flex;
}
.success{
  margin-left: 20px;
  width: 70px;
  font-size:12px ;
  background: rgba(54, 137, 255, 0.22);
  color: #3692ff;
  cursor: pointer;
  border-radius: 8px;
}
.error{
  width: 100px;
  font-size:12px ;
  background: linear-gradient(90deg, #fc7979 0%, #da4848 100%);
  color: #ffffff;
  cursor: pointer;
  border-radius: 8px;

}
.el-dialog {
    text-align: center !important;
    border-radius: 10px!important;
}
.dialogPrice{
    padding-bottom: 20px;
    color: #93999F;
}
.prices{
    color: #F01414;
}
.alert{
    padding: 20px 0;
    font-size: 14px;
    color: #93999F;

}
.confirmOrder{
    width: 100%;
    padding-bottom:60px;
}
.bgColor{
  width: 100%;
  height: 200px;
  background-color: red;
  background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
  background-size: 400% 400%;
  animation: gradient 15s ease infinite;
}
.main-shopcart{
    width: 1200px;
    margin: 0 auto;
    height: 42px;
    font-size: 24px;
    font-family: Microsoft YaHei;
    font-weight: bold;
    line-height: 35px;
    color: #FFFFFF;
    padding: 30px 0;
    opacity: 1;
}
@keyframes gradient {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}
.main{
    width: 1200px;
    margin: -100px auto 0 auto;
  /*background-color: red;*/
}
.main h1{
    color: #FFFFFF;
    padding: 30px 0 30px 47px;

}
.info{
    width: 1200px;
    padding: 5px 0px 20px 0px;
    background: #F3F5F7;
    border-radius: 10px;
  box-shadow: 0px 2px 5px #888888;
}
.info-main{
    margin: 10px 20px;
    background: #FFFFFF;
    border-radius: 10px;
    padding: 20px;
}
.head{
    padding: 20px;
    font-size: 18px;
    color: #333333;
}
/* 课程信息 */
.courseInfo{
    display: flex;
    width: 100%;
    height: 160px;
    margin: 0 auto;
}
.coursebg{
    width: 280px;
    height: 160px;
}
.coursebg img{
    width: 100%;
    height: 100%;
}
.courseName{
    margin:0 20px;
    width: 400px;
    height: 160px;
    font-size: 16px;
    color: #07111B;
    line-height:160px ;
    word-break:keep-all;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
}
.coursePrice{
    margin-left: 100px;
    height: 160px;
    text-align: right;
    line-height: 160px;
}
.coursePrice .nowprice{
    font-size: 18px;
    font-weight: 600;
    color: #1C1F21;
}
.coursePrice .oldprice{
    padding-left: 10px;
    font-size: 14px;
    text-decoration: line-through;
    color: #93999F;

}
/* 支付开始 */
.choose{
    width: 1200px;
    margin: 0 auto;
}
.choose h3{
    color: #222;
    font-size: 16px;
    font-weight: 400;
    padding: 0 20px;
}
.choosebg{
    display: flex;
    margin: 20px;
}
.choosebg span{
  margin-top: 60px;
  margin-right:40px;
  cursor: pointer;  
}
.choosebg span:hover{
    color: #01a8eb;
}
.payment{
    width: 130px;
    height: 50px;
    border-radius: 10px;
    cursor: pointer;
    margin-right: 10px;
    line-height: 50px;
    display: flex;
    padding: 0 10px;
    align-items: center;
}
.payment i{
    font-size: 35px;
    margin-right: 10px;
}
.payment span{
    line-height: 50px;
    color: #222222;
    font-weight: bold;
}

.payStyle{
  background: url("/image/checkedVip.png") no-repeat;
  background-size: 220px 111px;
  background-position: -67px -59px;
  border: #ff470a solid 1px !important;
}
.alipayment{
  border: #bfbfbf solid 1px;
  color: #01a8eb;
}
.wxpayment{
  border: #bfbfbf solid 1px;
  color: #01af37;
}

/* 支付结束 */
/* 结算 */
.foot{
    display: flex;
    justify-content: flex-end;
    width: 100%;
    height: 50px;
    line-height: 50px;
    color: #333333;
    margin-bottom: 10px;
}
.foot-item{
    width: 200px;
    height: 50px;
    line-height: 50px;
    font-size: 14px;
    font-weight: 400;
    color: #333333;
}
.foot-item:first-child{
    margin-top: 3px;
}
.old{
    margin-left: 10px;
}
.unique{
    margin-left: 5px;
    font-size: 24px;
    color: #F01414;
}
.btn{
    margin-right: 20px;
    width: 150px;
    height: 50px;
    border: none;
    color: #FFFFFF;
    font-size: 20px;
    border-radius: 5px;
    background: #F01414;
    cursor: pointer;
    box-shadow: 0px 3px 5px 2px #ff727f;
}
.pay{
    font-size: 18px;
    padding-left: 10px;
    color:#F01414 ;
}
.codeimg{
    margin:0 auto;
    border: #d2d2d2 solid 1px;
    width: 150px;
    height: 150px;
}
.codeimg img{
    width: 100%;
    height: 100%;
}
</style>